package fiuba.webapp.action;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.Preparable;

import fiuba.model.Configuracion;
import fiuba.model.Contenedor;
import fiuba.model.LabelValue;
import fiuba.model.MenuItem;
import fiuba.model.Seccion;
import fiuba.service.ContenidoEstaticoManager;
import fiuba.service.GenericManager;
import fiuba.service.SeccionDataManager;
import fiuba.model.ContenidoEstatico;
import java.util.Iterator;

public class ConfiguracionAction extends BaseAction implements Preparable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6363397367898856044L;
	private GenericManager<Configuracion, Long> configuracionManager;
	private ContenidoEstaticoManager contenidoEstaticoManager;
    private GenericManager<Seccion, Long> seccionManager;
	
    private Configuracion configuracion;
    private String estadoSitio;
    private String estaticoOffline = "";
    private String seccionInicial = "";
    
    
	public void prepare() throws Exception {
		// TODO Auto-generated method stub
    	this.configuracion = configuracionManager.get(1L);
    	// Boolean de sitio online
    	if (this.configuracion.isOnline()) estadoSitio = "online";
    	else estadoSitio = "offline";
    	// FK que puede ser null
    	if (this.configuracion.getContenidoOffline() != null) {
    		estaticoOffline = this.configuracion.getContenidoOffline().getId().toString(); 
    	}
    	if (this.configuracion.getSeccionInicial() != null) {
    		seccionInicial = this.configuracion.getSeccionInicial().getId().toString(); 
    	}
	}
	public Configuracion getConfiguracion() {
		return configuracion;
	}
	public void setConfiguracion(Configuracion configuracion) {
		this.configuracion = configuracion;
	}
	public void setConfiguracionManager(
			GenericManager<Configuracion, Long> configuracionManager) {
		this.configuracionManager = configuracionManager;
	}
	// Los dos metodos de la accion
	public String edit() {
		return INPUT;
	}
	public String save() throws Exception {
		// Online es booleano
    	if (estadoSitio.equals("online")) configuracion.setOnline(true);
    	else configuracion.setOnline(false);
    	// Elegido del combo
    	if (estaticoOffline.equals("")) {
    		configuracion.setContenidoOffline(null);
    	}
    	else {
    		try {
    			ContenidoEstatico c = this.contenidoEstaticoManager.get(Long.parseLong(estaticoOffline));
    			configuracion.setContenidoOffline(c);
    		}
    		catch (Exception e) {
        		configuracion.setContenidoOffline(null);
    		}
    	}
    	if (seccionInicial.equals("")) {
    		configuracion.setSeccionInicial(null);
    	}
    	else {
    		try {
    			Seccion c = this.seccionManager.get(Long.parseLong(seccionInicial));
    			configuracion.setSeccionInicial(c);
    		}
    		catch (Exception e) {
        		configuracion.setSeccionInicial(null);
    		}
    	}
		configuracionManager.save(configuracion);
		return SUCCESS;
	}
	public String getEstadoSitio() {
		return estadoSitio;
	}
	public void setEstadoSitio(String estadoSitio) {
		this.estadoSitio = estadoSitio;
	}
	
	public Map<String,String> getEstadosSitio() {
		Map<String,String> ret = new LinkedHashMap<String,String>();
		ret.put("online","Sitio online - disponible");
		ret.put("offline","Sitio offline - no disponible");
		return ret;
	}
	public Map<String,String> getEstaticos() {
		Map<String,String> ret = new LinkedHashMap<String,String>();
		ret.put("","Ninguno");
		Iterator i = this.contenidoEstaticoManager.getAllByName().iterator();
		while(i.hasNext()) {
			 ContenidoEstatico ce = (ContenidoEstatico) i.next();
			 ret.put(ce.getId().toString(), ce.getNombre());
		}
		return ret;
	}
	
	public Map<String,String>  getFormatosFechas() {
		Map<String,String>  ret = new LinkedHashMap<String,String>();
        for (int i = 1; i <= 3; i++) {
        	String txt = getText("fecha.descformato." + i);
        	ret.put("" + i, txt);
        }
        return ret;
    }

	public void setContenidoEstaticoManager(
			ContenidoEstaticoManager contenidoEstaticoManager) {
		this.contenidoEstaticoManager = contenidoEstaticoManager;
	}
	public String getEstaticoOffline() {
		return estaticoOffline;
	}
	public void setEstaticoOffline(String estaticoOffline) {
		this.estaticoOffline = estaticoOffline;
	}
	public String getSeccionInicial() {
		return seccionInicial;
	}
	public void setSeccionInicial(String seccionInicial) {
		this.seccionInicial = seccionInicial;
	}
	public void setSeccionManager(GenericManager<Seccion, Long> seccionManager) {
		this.seccionManager = seccionManager;
	}
	public Map<String,String> getSecciones() {
		Map<String,String> ret = new LinkedHashMap<String,String>();
		Iterator<Seccion> i = this.seccionManager.getAll().iterator();
		while(i.hasNext()) {
			 Seccion s = (Seccion) i.next();
			 ret.put(s.getId().toString(), s.getNombre());
		}
		return ret;
	}
	

}
